package edu.hubu.DateSort;

import java.util.ArrayList;
import java.util.List;

import static java.util.Collections.swap;

/*要求：将对象存储在ArrayList集合中，对集合中的元素——日期对象进行冒泡排序。
 * 但实际上：将对象存储在TreeSet集合中，
 * 采用带有比较器对象参数（也可直接在Date类中重写Comparable接口中的compareTo()方法）的TreeSet集合，
 * 可以在添加日期对象时就对日期对象利用比较器规则进行排序，
 * 同样达到从小到大的排序结果，这种方法更简洁。
 * */
public class DateSortDemo {
    public static void main(String[] args) {
        //TODO:1.创建list集合，用于存储日期对象
        List<Date> dates = new ArrayList<>();

        //TODO:2.创建集合元素日期对象
        Date data1 = new Date(2001, 1, 1);
        Date data2 = new Date(1999, 6, 12);
        Date data3 = new Date(2000, 11, 11);
        Date data4 = new Date(2001, 5, 23);
        Date data5 = new Date(1998, 12, 13);
        Date data6 = new Date(2002, 9, 5);
        Date data7 = new Date(2001, 4, 30);
        Date data8 = new Date(2000, 11, 21);
        Date data9 = new Date(2001, 5, 12);

        //TODO:3.并将其添加到集合中
        dates.add(data1);
        dates.add(data2);
        dates.add(data3);
        dates.add(data4);
        dates.add(data5);
        dates.add(data6);
        dates.add(data7);
        dates.add(data8);
        dates.add(data9);

        //TODO:4.对list集合进行排序，此处采用冒泡排序
        bubbleSort(dates);

        //TODO:5.对list集合进行打印输出
        for (Date date : dates) {
            System.out.println(date);
        }

    }

    /*冒泡排序，从小到大*/
    private static void bubbleSort(List<Date> x) {
        for (int i = 0; i < x.size() - 1; i++) {
            for (int j = 0; j < (x.size() - 1) - i; j++) {
                if (x.get(j).getYear() == x.get(j + 1).getYear()) {
                    //若两者年份相同，则比较次要条件-月份
                    if (x.get(j).getMonth() == x.get(j + 1).getMonth()) {
                        //若两者年份相同，则比较次要条件-天数
                        if (x.get(j).getDay() > x.get(j + 1).getDay()) {
                            swap(x, j, j + 1);
                        }
                    } else if (x.get(j).getMonth() > x.get(j + 1).getMonth()) {
                        //若前者月份大于后者，则交换两者位置
                        swap(x, j, j + 1);
                    }
                } else if (x.get(j).getYear() > x.get(j + 1).getYear()) {
                    //若前者年份大于后者，则交换两者位置
                    swap(x, j, j + 1);
                }
            }
        }

    }

}